package unq_ui.tp_robots_web_wicket;


import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.PropertyModel;
import robots.domain.Robot;
import robots.excepcions.DineroEnNullException;
import robots.excepcions.DineroInsuficienteException;
import robots.excepcions.RobotEnNullException;
import robots.models.CompetirAppModel;
import robots.models.JugadorAppModel;
import unq_ui.tp_robots_web_wicket.tools.BotonVolver;


public class CompetenciaPage extends WebPage{
	private static final long serialVersionUID = -3225864072633398191L;
	final private CompetirAppModel model;
	final private JugadorAppModel modelAnterior;
	
	final private Idioma idiomaSeleccionado;
	
	public CompetenciaPage(CompetirAppModel modelCompetencia, JugadorAppModel modelAnterior, Idioma idiomaSeleccionado){
		this.model= modelCompetencia; 
		this.modelAnterior= modelAnterior;
		this.idiomaSeleccionado= idiomaSeleccionado;
		
		add(new Label("tituloPrincipal",this.idiomaSeleccionado.tituloPrincipal_3));
		
		Form<CompetirAppModel> formulario= crearFormularioApostarYLuchar();
		crearMenusDesplegables(formulario);
		
		add(new FeedbackPanel("feedback"));
		add(new Label("dineroDeJugador", this.idiomaSeleccionado.dineroJugador_3 + this.model.getJugador().getDinero().toString()));
	}



	private void crearMenusDesplegables(Form<CompetirAppModel> formulario) {
		DropDownChoice<Robot> robotsJugador = new DropDownChoice<Robot>("robotsJugador", new PropertyModel<Robot>(this.model, "robotJugador"), this.model.getJugador().getRobots());

		robotsJugador.setNullValid(true);
		formulario.add(robotsJugador);
		
		DropDownChoice<Robot> robotsSistema = new DropDownChoice<Robot>("robotsSistema", new PropertyModel<Robot>(this.model, "robotSistema"), this.model.getSistema().getRobots());
		
		robotsSistema.setNullValid(true);
		formulario.add(robotsSistema);
		
		crearInformacionAdicional(formulario);
		
	}



	private void crearInformacionAdicional(Form<CompetirAppModel> formulario) {
		formulario.add(new Label("seleccionaTuRobot",this.idiomaSeleccionado.seleccionaTuRobot_3));
		formulario.add(new Label("seleccionaOponente",this.idiomaSeleccionado.seleccionaOponente_3));
		formulario.add(new Label("ingresaApuesta",this.idiomaSeleccionado.ingresaApuesta_3));
		
	}



	private Form<CompetirAppModel> crearFormularioApostarYLuchar() {
		final Form<CompetirAppModel> form = new Form<CompetirAppModel>("formApuesta",	
				new CompoundPropertyModel<CompetirAppModel>(this.model)) {
					private static final long serialVersionUID = -8197507145760854723L;
			@Override
			protected void onSubmit() {
						try {
							getModelObject().competir();
							modelAnterior.setRespuestaDeCompetir(crearRespuestaDeCompetir());
							setResponsePage(new MainPage(modelAnterior, idiomaSeleccionado));
						} 
						 catch (RobotEnNullException e) {
							error(idiomaSeleccionado.errorRobotNull_3);
						}
						catch (DineroInsuficienteException e) {
							error(idiomaSeleccionado.errorDineroInsuficiente_3);
						} catch (DineroEnNullException e) {
							error(idiomaSeleccionado.errorDineroNull_3);
						}	
			}

			private String crearRespuestaDeCompetir() {
				if (model.getResultado().getGanoElLocal()){
					return idiomaSeleccionado.ganancia_3 + model.getResultado().getGanancia();
				}
				else{
					return idiomaSeleccionado.perdida_3 + model.getResultado().getApuesta();
				}
			}

		};
		
		add(form);
		form.add(new TextField<Double>("apuesta"));
		new BotonVolver("cancelar", form, new MainPage(modelAnterior,idiomaSeleccionado));
		return form;
	}
}
